#include <stdio.h>
#include <stdlib.h>

#define ListSize 100
typedef int DataType;
typedef struct{
    DataType data[ListSize];
    int length;
} SeqList;


//置空表
void InitList(SeqList *L)
{
    L->length = 0;
}

//求表长
int ListLength(SeqList *L)
{
    return L->length;
}

//表中第 i 个元素
DataType GetNode(SeqList *L, int i)
{
    if(i<1 || i>L->length){
        printf("position error");
        exit(0);
    }
    return L->data[i-1];
}

//按值查找
int LocateNode(SeqList *L, DataType x)
{
    for(int i=0; i<L->length;i++){
        if(L->data[i] == x){
            return i+1;
        }
    }
    return 0;
}

void CreateList(SeqList *L)
{
    int i;
    DataType x;
    printf("input 5 numbers:\n");

//    srand((int)time(0));
    for(i=0; i<5; i++){
         scanf("%d", &x);
         L->data[i] = x;
//         L->data[i] = rand()%10+1;
         L->length++;
    }
    return ;
}

/**
 * 在第i个位置插入一个新元素 x
 * 位置 1 ... i ...length
 * 下标 0     i-1  length-1
 * @param L
 * @param i
 * @param x
 */
void InsertList(SeqList *L, int i, DataType x)
{
    int j;
    if(i<1 || i>L->length+1){
        printf("position error");
        return;
    }

    if(L->length>=ListSize){
        printf("overflow");
        return;
    }
    for(j=L->length-1;j>=i-1;j--){
        L->data[j+1] = L->data[j];
    }
    L->data[i-1] = x;
    L->length++;
}

/**
 * 删除第 i 个位置的元素
 * 实现步骤： （1）将线性表 L 中的第 i+1 个至第 n 个结点依此向前移动一个位置。
 *          （2）线性表长度减 1。
 * @param L
 * @param i
 * @return
 */
DataType DeleteList(SeqList *L, int i)
{
    int j;
    DataType x;
    if(L->length == 0){
        printf("Linear table is empty");
        exit(0);
    }else if(i<1 || i>L->length){
        printf("The data element to be deleted does not exit");
        exit(0);
    }else{
        x = L->data[i-1];
        for(j=i; j<L->length;j++){
            L->data[j-1] = L->data[j];
        }
    }
    L->length--;
    return x;
}

//输出所有的结点
void GetAllNodes(SeqList *L)
{
    int i;
    for(i=0; i<L->length;i++){
        printf("%d, ", L->data[i]);
    }
}

int main()
{
    SeqList L;

    InitList(&L);
    CreateList(&L);
//    printf("%d", ListLength(&L));
//    printf("%d", GetNode(&L, 3));
    printf("%d", LocateNode(&L, 9));
//    InsertList(&L, 3, 88);
//    GetAllNodes(&L);
//    DeleteList(&L, 1);
//    GetAllNodes(&L);
    return 0;
}